import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


/**
 * 先排序，然后先固定两个数，在剩下的里面找两个数的和等于相反数，去重
 */
public class _49_字母异位词分组 {

    @Test
    public void test() {
        //       String [] strs = {"eat", "tea", "tan", "ate", "nat", "bat"};
        String[] strs = {"ddddddddddg", "dgggggggggg"};
        System.out.println(groupAnagrams(strs));
    }

    public List<List<String>> groupAnagrams(String[] strs) {

        List<String> list = new ArrayList<>(Arrays.asList(strs));
        List<List<String>> res = new ArrayList<>();
        if (strs == null) {
            return res;
        }
        while (list.size() > 0) {
            //局部变量
            List<String> list1 = new ArrayList();
            list1.add(list.get(0));
            List<String> num = new ArrayList();
            num.add(list.get(0));
//            if (list.get(0)==""){
//                if (list.size()>1){
//                    for (int i = 1; i < list.size(); i++) {
//                        if (list.get(i).equals("")){
//                            list1.add(list.get(i));
//                            list.remove(i);
//                        }
//                    }
//                    res.add(list1);
//                }
//            }
            if (list.size() > 1) {
                for (int i = 1; i < list.size(); i++) {
                    if (list.get(0).equals("") && list.get(i).equals("")) {
                        list1.add(list.get(i));
                        num.add(list.get(i));
                        continue;
                    }
                    if (list.get(i).length() == list.get(0).length()) {
                        String s = list.get(0);
                        char[] chars = s.toCharArray();
                        boolean flag = true;
                        for (int k = 0; k < chars.length; k++) {
                            if (list.get(i).contains(String.valueOf(chars[k]))) {
                                continue;
                            } else {
                                flag = false;
                            }
                        }
                        if (flag) {
                            list1.add(list.get(i));
                            num.add(list.get(i));
                        }
                    }

                }
            }
            res.add(list1);
            for (int i = 0; i < num.size(); i++) {
                list.remove(num.get(i));
            }

        }
        return res;
    }
}
